#ifndef __SNAKE_H__
#define __SNAKE_H__

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <conio.h>

#define VK_W 0x57
#define VK_S 0x53
#define VK_A 0x41
#define VK_D 0x44

#define WIDE 60
#define HIGH 20

// 颜色定义
#define RED     4
#define GREEN   2
#define YELLOW  6
#define BLUE    1
#define MAGENTA 5
#define WHITE   15

// 播放音效
void playSoundEffect(const char* filename);

// 布尔类型定义
typedef enum { false = 0, true = 1 } bool;

// 临时信息
typedef struct {
    char message[50];    
    DWORD showTime;      
} TipMessage;
extern TipMessage speedTip;  // 速度提示

// 位置结构
struct Body {
    int X;
    int Y;
};

typedef struct Body Position;

// 蛇结构
typedef struct {
    Position oldTail;    // 蛇尾的上一位置
} SnakeState;

// 蛇结构
struct Snake {
    struct Body body[WIDE * HIGH];  // 蛇身数组
    int size;                      // 当前长度
    char direction;                // 移动方向
} snake;

// 食物结构
struct FOOD {
    int X;
    int Y;
    int oldX; 
    int oldY;
} food;

// 全局变量声明
extern int score;            // 当前得分
extern bool isPaused;        // 游戏暂停状态
extern SnakeState snakeState;  // 蛇状态
extern bool isSoundEnabled;  // 音效开关

// 函数声明
void initsnake(void);        // 初始化蛇
void initUI(void);           // 初始化游戏界面
void setColor(int color);    // 设置控制台文本颜色
void gotoxy(int x, int y);   // 设置光标位置
void hideCursor();           // 隐藏控制台光标
void welcometogame();        // 显示欢迎界面
char* SnakeHead(char direction);  // 获取蛇头符号
void scoreandtips(void);     // 显示分数和提示信息
void File_out(void);         // 保存最高分
void drawGame(void);         // 绘制游戏画面
bool checkCollision();       // 检查碰撞
void moveSnake();            // 移动蛇
void generatefood();         // 生成食物
bool isFoodValid();          // 检查食物位置有效性
void handleInput(int key);   // 处理键盘输入
void playSound(const char* filename);  // 播放音效文件
#endif